The present invention relates to network-based storage systems with redundant storage controllers, and more particularly, for adaptive data throttling of redundant storage controller communications to give priority to inter-controller data writes (mirroring operation between redundant controllers) thereby minimizing latency for processing I/O write requests submitted from the server to one of the redundant storage controllers.
A variety of network-attached and SAN (Storage Area Network) storage systems are known to provide for data to be stored on an Ethernet or other IP-based networks. Typically, the known storage systems include one or more storage controllers. The storage controllers control and provide network-based access to respective arrays of storage disk drives, e.g., redundant arrays of independent disks (RAIDs). Each storage controller typically includes a buffer or cache memory used to temporarily store data as it is transferred between the network and that controller's disk drives. For example, incoming data packets containing I/O (input/output) write data are maintained in a storage controller cache or buffer until successfully written to the appropriate disk drives by the storage controller.
Known storage systems implement storage controller failover mechanisms to protect against the possible failure of a storage controller. One failover mechanism includes that two storage controllers are paired to provide controller redundancy. Each of the redundant storage controller maintains a mirrored copy of the other storage controller's cache, and configuration data. If one of the paired storage controllers detects a failure by the other, the non-failing storage controller takes control of the failing controller's associated disk drives, allowing these disk drives to be accessed via the network while the failing storage controller is replaced. In doing so, the non-failing storage controller effectively “picks up” the workload of the failing controller, preferably seamlessly at failure. Upon replacement of the failing controller, a synchronization or “rebind” operation is carried out by the non-failing controller to copy over the cache and configuration data needed to bring the new storage controller on line.
FIG. 1A herein depicts a functional block diagram of a known network-based storage system (102), including redundant controllers that intermessage using conventional network protocol. Storage system (102) includes a data storage repository, or storage (110) that is connected to first and second controllers (120A) and (120B), respectively. Also, each of first and second controllers is connected to a network server (130). Both the first and second controllers include a cache memory (not expressly shown in the figure). When a write I/O write request from the server (130) is received by one of the controllers, for example, first controller (120A), the first controller fetches the data to be written (stored) from the server.
Upon receipt of the write I/O data in the cache of first controller (120A), a copy of the write data is sent and written to the cache storage in second controller (120B). This redundant copy of I/O write data written to and stored in the cache of the second controller (120B) is said to mirror the data in the first controller (120A). Data mirroring in redundant storage controllers ensures that both controllers have a copy of the data, so if one goes down, the data are not lost because it still retrievable from the other good redundant controller. Once the second controller acknowledges that it has a copy of the I/O write data from the first controller, the write I/O request from the server (130) is complete. Subsequently, one of the controllers submits a write I/O request to the (back-end) storage, and transfers the data from its cache to the back-end storage. The data so stored is accessible to either controller upon a read request.
When a read I/O request is received by one of the controllers (120A; 120B), for example, first controller (120A), the first controller determines whether the requested read I/O data is present in the first controller's cache memory. If the requested read I/O data are present in the first controller's cache, the first controller completes the read I/O request by transferring the data (present) from the controller directly to the server. But where the requested read I/O data is not present in the controller's cache at the time of the read I/O request, the controller reads the requested data from the (back-end) storage (110), transferring the data to the server (130). Optionally, the first controller (120A) may choose to cache the data read from storage (110) a read cache.
While it is known to interconnect cooperating or redundant storage controllers for intercontroller messaging using a dedicated memory bus or communication channel, for example, a PCI bus, redundant storage controllers more typically carry out inter-controller messaging using the same media and protocol used to communicate with the server, and fixed storage (e.g., server (130) and storage (110)). For example, SAN Volume Controller, manufactured by International Business Machines (IBM) Corporation, controls a storage area network (SAN) including communication between servers, back-end storage and redundant storage controllers using conventional network communication links and protocol.
FIG. 1B is a simplified representation of a storage control system (104) comprising a storage area network, or SAN (140). SAN (140) is connected to a server (130), to a first controller (120(A)), to a second controller (120(B)) and to a data storage repository, or storage (110). Messaging, including mirroring between redundant controllers uses the same SAN network communication medium and protocol for message exchange between the controllers and server and controller and back-end storage. Consequently, the available bandwidth of the communication medium by the protocol is shared for each of the above-described controller communications. Where the network communication and protocol supports full duplex (data can be sent and received simultaneously), then the three above described data transfer functions share the outbound bandwidth, and the three functions share the inbound bandwidth. Where the communication medium and protocol is simplex rather than duplex, all of the aforementioned six types of data transfer share the bandwidth of the communication link.
To be effective, the write cache implemented by a storage controller must be sufficiently fast so that write I/O requests submitted to the server are completed with a lower latency than the latency in writing directly from the server to the back-end storage. A significant factor in the time required for the controller to process a write I/O request is the time required to mirror the I/O write data to the other (redundant) controller. Techniques have developed in an effort to minimize the latency for transferring data between controllers, to better control time required for processing write I/O requests.
In one known storage system, a plurality of storage subsystem controllers are arranged to share access to common storage elements. Instead of maintaining a cache in each storage controller, however, the known storage system includes an intelligent centralized cache (also referred to as a cache controller) shared by all controllers in a storage subsystem. Because the intelligent cache controller is centralized, each controller sharing its function is simplified. Such known controller structure and operation, however, while eliminating local cache memory, does not have the disaster protection inherent in redundant storage controller systems, by their respective redundant cache memories. If the central cache goes down, all data is lost.
While other known storage systems use dedicated communication links between controllers, dedicated inter-controller links have the disadvantage of requiring additional hardware, and in many implementations (for example, if a PCI bus is used as the communication link), impose physical restrictions on the location of the controllers. Other known attempts at solutions at minimizes latency of intercontroller data mirroring operations include the use of static throttling. Static throttling is a technique whereby the storage controllers are controlled to simply throttling the speed of different types of data transfer, without any regard for the current latency of communications between controllers. While static throttling may ensure that latency of communications between controllers is kept low, such an improvement (decrease) in latency times is at the expense of not exploiting the full available bandwidth of the communication link for other I/O workloads.